package hehe.worker;

import hehe.worker.base.Pool;
import hehe.worker.pool.WorkerPool;

/**
 * worker 池快捷类
 * <B>说明：</B>
 * <pre>
 *  略
 * </pre>
 * <B>示例：</B>
 * <pre>
 *  略
 * </pre>
 * <B>日志：</B>
 * <pre>
 *  略
 * </pre>
 * <B>注意事项：</B>
 * <pre>
 *  略
 * </pre>
 */
public class WorkerExecutors
{

    /**
     * 创建通用线程池
     *<B>说明：</B>
     *<pre>
     * 支持定义默认worker 数量
     * 支持定义最大worker 数量
     * 默认worker始终保存在空闲worker队列
     * 非默认worker 任务完成后,直接删除
     *</pre>
     */
    public static Pool newCommonWorkerPool(int defaultWorkerSize,int maxWorkerSize)
    {
        Pool pool = new WorkerPool(defaultWorkerSize,maxWorkerSize);
        pool.start();

        return pool;
    }

    /**
     * 创建一个定长线程池
     *<B>说明：</B>
     *<pre>
     * 即默认worker,与最大worker 数量一致,执行任务过程中,worker不会新增
     * 堵塞的任务直接进入会在队列中等待
     *</pre>
     */
    public static Pool newFixedWorkerPool(int defaultWorkerSize)
    {
        Pool pool = new WorkerPool(defaultWorkerSize,defaultWorkerSize);
        pool.start();

        return pool;
    }

    /**
     * 创建一个可缓存线程池
     *<B>说明：</B>
     *<pre>
     * 无需创建默认worker
     * worker 任务结束,将回收worker,直接删除worker
     *</pre>
     */
    public static Pool newCachedWorkerPool()
    {
        Pool pool = new WorkerPool(0,0);
        pool.start();

        return pool;
    }

    /**
     * 创建一个单线程化的线程池
     *<B>说明：</B>
     *<pre>
     * 只会创建一个默认worker 执行任务
     * 保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行
     *</pre>
     */
    public static Pool newSingleWorkerPool()
    {
        Pool pool = new WorkerPool(1,1);
        pool.start();

        return pool;
    }

}
